import { ref } from 'vue';

/**
 * 节流钩子函数
 * @param fn 需要节流的函数
 * @param delay 延迟时间，单位毫秒
 */
export default function useThrottle<T extends (...args: any[]) => any>(
  fn: T,
  delay: number = 300
) {
  // 上次执行时间
  const lastTime = ref(0);
  
  // 是否正在执行
  const isRunning = ref(false);
  
  // 节流函数
  const throttled = ((...args: Parameters<T>): ReturnType<T> | undefined => {
    const now = Date.now();
    
    // 如果是第一次执行，或者距离上次执行时间超过了延迟时间
    if (now - lastTime.value > delay) {
      lastTime.value = now;
      isRunning.value = true;
      const result = fn(...args);
      isRunning.value = false;
      return result;
    }
    
    return undefined;
  }) as T;
  
  // 取消节流
  const cancel = () => {
    lastTime.value = 0;
    isRunning.value = false;
  };
  
  return {
    throttled,
    isRunning,
    cancel
  };
} 